#ifndef KLIPPY_REACTOR_H
#define KLIPPY_REACTOR_H

#include <functional>
#include <memory>
#include <chrono>

namespace klippy {

class Reactor {
public:
    virtual ~Reactor() = default;

    // 定时器管理
    virtual void register_timer(std::function<void()> callback, 
                              std::chrono::milliseconds interval) = 0;
    virtual void update_timer(std::chrono::milliseconds new_interval) = 0;
    virtual void unregister_timer() = 0;

    // 文件描述符监控
    virtual void register_fd(int fd, std::function<void(int)> callback) = 0;
    virtual void unregister_fd(int fd) = 0;
    virtual void set_fd_wake(int fd, bool wake_read, bool wake_write) = 0;

    // 异步回调
    virtual void register_async_callback(std::function<void()> callback) = 0;
    virtual void notify_async_complete() = 0;

    // 互斥锁
    virtual void acquire_mutex() = 0;
    virtual void release_mutex() = 0;

    // 运行事件循环
    virtual void run() = 0;
    virtual void stop() = 0;
};

// Reactor工厂函数
std::shared_ptr<Reactor> create_reactor();

} // namespace klippy

#endif // KLIPPY_REACTOR_H